import { getToken, setToken, removeToken, setTimeStamp } from '@/utils/auth'
import { login, getUserInfo, getUserDetailById } from '@/api/user'

const state = {
    token: getToken(),
    userInfo: {}
}
const mutations = {
    setToken(state, token) {
        state.token = token
        setToken(token)
    },
    removeToken(state) {
        state.token = null
        removeToken() // 同步到缓存
    },
    setUserInfo(state, result) {
        // 更新一个对象
        state.userInfo = result
    },
    removeUseInfo(state) {
        state.userInfo = {}
    }
}
const actions = {
    async login(context, data) {
        const result = await login(data) // 拿到token
        context.commit('setToken', result) // 存token
        // 拿到token就说明登录成功了
        setTimeStamp() // 存入当前token的时间戳
    },
    async getUser(context) {
        const result = await getUserInfo() // 拿到用户资料
        // 获取用户基本信息
        const baseInfo = await getUserDetailById(result.userId)
        // 把用户资料和用户基本信息进行合并
        const obj = { ...result, ...baseInfo }
        context.commit('setUserInfo', obj) // 存用户信息
        return result // 为什么要return? 这里是给我们后期做权限的时候 留下的伏笔
    },
    // 登出操作
    lgout(context) {
        // 删除token
        context.commit('removeToken')
        // 删除用户资料
        context.commit('removeUseInfo')
    }
}

export default {
    namespaced: true,
    state,
    mutations,
    actions
}